Data centers housing significant numbers of interconnected computing systems have become commonplace, such as private data centers that are operated by and on behalf of a single organization, and public data centers that are operated by entities as businesses to provide computing resources to customers. For example, some public data center operators provide network access, power, and secure installation facilities for hardware owned by various customers, while other public data center operators provide “full service” facilities that also include hardware resources made available for use by their customers. However, as the scale and scope of typical data centers has increased, the task of provisioning, administering, and managing the physical computing resources has become increasingly complicated.
The advent of virtualization technologies for commodity hardware has provided a partial solution to the problem of managing large-scale computing resources for many customers with diverse needs, allowing various computing resources to be efficiently and securely shared between multiple customers. For example, virtualization technologies such as those provided by VMWare, XEN, or User-Mode Linux may allow a single physical computing machine to be shared among multiple users by providing each user with one or more virtual machines hosted by the single physical computing machine. Each such virtual machine may be a software simulation acting as a distinct logical computing system that provides users with the illusion that they are the sole operators and administrators of a given hardware computing resource, while also providing application isolation and security among the various virtual machines. Furthermore, some virtualization technologies are capable of providing virtual resources that span one or more physical resources, such as a single virtual machine with multiple virtual processors that actually spans multiple distinct physical computing systems.
While the availability of data centers and virtualization technologies has provided various benefits, various problems still exist. For example, one problem that arises in the context of data centers that host large numbers of programs for a set of diverse customers on large numbers of physical computing systems involves managing the execution of programs for customers in such a manner as to meet customer expectations while also making efficient use of the computing systems. For example, a first customer may desire that at least some of his/her programs be executed in widely distributed locations, so that a failure of a single physical computing system or of connectivity to a particular data center does not cause access to all of those programs to be lost. Conversely, a second customer may desire that at least some of his/her programs be executed close to each other so that network connectivity between the programs is likely to have desired performance characteristics (e.g., low latency, high throughput, etc.). In addition, particular customers may desire particular capabilities for computing systems that execute particular programs, with some capabilities being available from only a subset of the computing systems. However, it is difficult for customers to specify such expectations—for example, a customer may need to obtain information about all of the possibly available computing systems (e.g., their locations and capabilities), and repeatedly execute programs by identifying a particular computing system whose capabilities and location is appropriate for execution of a particular program and by manually requesting that the particular computing system be used to execute the program, which is highly time-consuming and inefficient. In addition, it is difficult for an operator of one or more data centers to efficiently satisfy such customer expectations—for example, if a customer requests that a particular computing system be used to execute a particular program, the operator may be unable to satisfy the request (e.g., that computing system may be currently unavailable, or would be overloaded if used as requested), while other available computing systems that would also be appropriate may be under-utilized.